OSSM-2006 Fix HasSynced() [maistra-2.1] #22
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Previously, if the set of namespaces in the multiNamespaceInformer was empty, HasSynced() would return true. This caused controllers to start, even though there are no informers in multiNamespaceeInformer. The controllers would read from the cache (which would return no resources), causing them to perform the reconcile on bad input data. Typically, this would cause the controller to remove resources that shouldn't be removed. Of course, moments later, the namespace list gets initialized, the controllers are notified of the appearance of new resources, and they recreate the resources they had removed a moment ago. Although the end state is correct, for some resource types, such as Routes, their deletion wreaks havoc.
HasSynced() shouldn't return true until SetNamespaces() has been called at least once (this is done by the ServiceMeshMemberRoll controller after it reads the ServiceMeshMemberRoll object for the first time). The informer also shouldn't be initialized with all namespaces, but should remain empty until the actual member namespace list is read from the ServiceMeshMemberRoll.